package com.zlc.big_event.controller;


import com.zlc.big_event.pojo.Category;
import com.zlc.big_event.pojo.Result;
import com.zlc.big_event.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 添加分类
     *
     * @param category 要添加的分类对象，使用RequestBody从请求体中获取JSON数据并将其转换为Category对象，使用Validated进行数据校验
     * @return 返回操作结果，此处返回一个表示操作成功的Result对象
     *
     * 通过POST请求接收客户端发送的分类信息，并调用服务层方法进行添加操作
     * 该方法主要作用是处理添加分类的业务逻辑，并返回操作结果
     */
    @PostMapping
    public Result add(@RequestBody @Validated(Category.Add.class) Category category)
    {
        // 调用服务层的添加方法，执行具体的添加操作
        categoryService.add(category);

        // 返回操作成功的结果
        return Result.success();
    }

    /**
     * 处理GET请求，用于获取分类列表
     *
     * @return 返回一个Result对象，其中包含分类列表
     */
    @GetMapping()
    public Result<List<Category>> list()
    {
        // 调用服务层的查询方法，获取所有的分类列表
       List<Category>  cs = categoryService.list();

        // 返回成功的结果，携带分类列表数据
        return Result.success(cs);
    }


    /**
     * 根据ID获取分类详情
     *
     * @param id 分类ID
     * @return 包含分类详情的Result对象
     */
    @GetMapping("/detail")
    public Result<Category> datail(Integer id){
        return Result.success(categoryService.FindById(id));
    }

    /**
     * 通过HTTP PUT请求更新分类信息
     *
     * @param category 更新后的分类信息，通过请求体传递，并进行有效性校验
     * @return 返回操作结果，成功则返回成功消息
     */
    @PutMapping()
    public Result update(@RequestBody @Validated(Category.Update.class) Category category)
    {
        // 调用服务层的更新方法，传入新的分类信息进行更新操作
        categoryService.update(category);

        // 返回成功结果，表示更新操作完成
        return Result.success();
    }

    ///删除分类
    @DeleteMapping()
    public Result delete( Integer id)
    {
        // 调用服务层的删除方法，传入要删除的分类ID进行删除操作
        categoryService.delete(id);

        // 返回成功结果，表示删除操作完成
        return Result.success();
    }

}
